#ifndef __LRUCACHE_H__
#define __LRUCACHE_H__

#include <iostream>
#include <string>
#include <list>
#include <unordered_map>
#include <nlohmann/json.hpp>
#include <fstream>
#include <sstream>
using namespace std;
using json = nlohmann::json;

struct CacheNode
{
    CacheNode(string k, string v)
    : key(k)
    , value(v)
    {

    }
    string key;
    string value;
};

class LRUCache
{
public:
    LRUCache(int num = 10);
    LRUCache(const LRUCache &cache);
    void addPendingList(const string& key,const string & value);//往缓存中添加数据
    void addResultList(const string &key, const string &value);

    void readFromFile(const string& filename);//从文件中读取缓存信息
    void writeToFile(const string& filename);//将缓存信息写入到文件中

    void update(LRUCache &rhs);// 更新缓存信息
    void updateAll(LRUCache &rhs);

    list<CacheNode> &getPendingUpateList();//获取待更新的节点List
    list<CacheNode> &getresultsList();
    
    void printResultList();//测试用
    void printPendingList();//测试用

    string SearchKeyword(const string &key); // 在缓存中查找关键字
    void clearPendingList(); //清空待更新队列

private:
    unordered_map<string, list<CacheNode>::iterator> _resultsMap;//采用hashTable进行查找
    list<CacheNode> _resultsList;//保存键值对
    unordered_map<string, list<CacheNode>::iterator> _pendingUpdateMap;
    list<CacheNode> _pendingUpdateList;//等待更新的节点信息
    int _capacity; // 缓存节点的容量
};

#endif